# 파이썬 기본훑기
- 파이썬 문법 수업이 아닌, 수업에서 다루게 될 기본적인 문법들만 빠르게 알려주는 시간입니다.
- 더 궁금한 부분이 있다면 구글링을 해보시고, 그래도 모르는 부분이 있다면 편하게 질문 남겨주세요 !
# 파이썬 명령어
파이썬 버전을 확인하고 싶을 때
$ python --version # Python 3.10.1
Interactive
모드로 실행하고 싶을 때$ python
python 명령어로 파이썬 파일을 실행할 때
$ python [파이썬_파일]
# 기본 명령어
# 출력
- 로그를 출력할 때는
print
를 활용합니다.
print("HI") # HI
print("H"+"I") # HI
print("HI"+1) # HI1
# 변수
# 변수 선언
- 변수를 선언할 때는
변수명 = 값
으로 표현합니다.
name = "grab" # str 타입을 가지는 "grab"이 들어갑니다.
age = 25 # int 타입을 가지는 25가 들어갑니다.
friends = ["humphrey", "kyle", "hardy"] # list 타입을 가지며 3개의 인자를 가집니다.
# 네이밍
파이썬에서 변수, 함수의 네이밍은
snake_case
를 클래스는PascalCase
를 사용합니다.my_friends = None class GoodFriend: ...
# 기본 자료형
- 파이썬은 동적으로 타입이 관리되는 프로그래밍 언어입니다. 따라서 위와 같이 타입을 별도로 명시해주지 않아도, 내부적으로 해당 변수가 어떤 타입을 가지고 있는지 알고 있습니다.
# 문자열(String)
str1 = "hello"
str2 = "grab"
type(str1) # 변수의 타입을 확인할 수 있음
# <class 'str'>
f"{str1} {str2}!" # f string을 활용해서 변수를 문자열에 쉽게 합칠 수 있음.
# "hello grab"
str1[0:3] #인덱스를 기준으로 string을 따로 가져올 수 있음
# 인덱스 0부터 2까지
# "gra"
# 숫자형(Number)
- 숫자형 타입에는 크게
int(정수)
,float(실수)
,complex
가 존재합니다.
num1 = 10
num2 = -10.5
type(num1)
# <class 'int'>
type(num2)
# <class 'float'>
"my age is " + num1 # 문자열과 숫자의 결합이 가능함.
# my age is 10
# None
- 아무것도 없음을 표현할 때 사용되는 자료형
a = None
# 불리언(Boolean)
- True/False가 존재함
a = True
b = False
b = bool('') #False
c = bool([]) #False
d = bool('a') #True
e = bool(None)#False
# 데이터 구조(Data Structure)
- 구조적으로 데이터를 담을 수 있도록 돕는 특정 데이터 타입임.
- 대표적으로
list
,dictionary
,set
,tuple
이 있음.
# 리스트(list)
- 다른 프로그래밍 언어의 배열의 역할과 동일합니다
arr0 = list()
arr1 = ["그랩"] # arr0과 동일함
arr2 = [1,2,3]
# list 요소에 접근하기
arr2[0] #0번째 인덱스 요소를 가져옴
# 1
# list의 빌트인 메서드 (append, pop)
arr1.append("카일") # 요소를 추가함
# arr1 : ["카일"]
arr1.pop(0) # 특정 인덱스의 요소를 삭제함
# arr1 : ["카일"]
len(arr2) #길이를 구하는 len 함수
# 3
# 딕셔너리(dictionary)
- 딕셔너리는 key: value 형태로 데이터를 저장합니다
dict1 = {"name": "grab", "age": 28}
dict2 = dict()
# 값 넣기
dict2["fruits"] = ["banana", "apple"] #dict2에 fruits라는 키로 리스트를 넣는다.
# dict2 : {"fruits": ["banana", "apple"]}
# 값 접근하기1
dict1["name"]
# grab
# 값 접근하기2
dict1.get("address", "no address") #첫번째 인자에 key, 두번째 인자에 기본 값을 넣는다.
# no address
# dict의 빌트인 메서드(values, keys)
dict1.values() #value을 list 형태로 반환
# ["grab", 28]
dict1.keys() #key를 list 형태로 반환
# ["name","age"]
# 튜플(tuple)
- list와 비슷하게 순서를 가지고 있지만, 한번 선언된 값을 변경할 수 없습니다(불변성)
tuple1 = (1, 2, 3)
tu[0] = 100 # 새로운 값을 할당하려고 하면 오류가 발생한다.
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: 'tuple' object does not support item assignment
# 집합(set)
- 집합 자료형은 list와 비슷해보이지만, 중복을 허용하지 않고 순서가 따로 없습니다.
- 보통 산술적으로 교집합, 합집합, 차집합을 구할 때 사용한다.
s1 = set([1, 2, 3, 3])
# {1, 2, 3}
# 조건문과 반복문
# 조건문
if [표현식]:... elif [표현식]:... else:...
:로 조건문을 나타냅니다.- 값을 비교할 때는
==
,≥
,>
,≤
,<
을 주로 사용합니다.
- 값을 비교할 때는
num=50
if num < 10:
print("한 자리수 입니다.")
elif 10 <= num < 100:
print("두 자리수 입니다.")
else:
print("세 자리수 이상입니다.")
# 반복문
for [단일객체] in [반복가능한 객체]
을 활용합니다. 이때 반복가능한 객체는 List, Tuple이 대표적입니다.
names = ["grab", "hardy", "humphrey", "kyle"]
for name in names:
print(name)
# grab
# hardy
# humphrey
# kyle
- 순서 index를 함께 알고 싶을 땐
enumerate
를 활용합니다.
for idx, name in enumerate(names):
print(idx, name)
# 0 grab
# 1 hardy
# 2 humphrey
# 3 kyle
# 함수
- 함수의 시그니처는
def 함수명(파라미터):
로 표현합니다. - 내부 로직은 보통
Tab, 2space, 4space
으로 들여써서 작성합니다.
def hello():
print("HI")
# Function Parameters
def multiply(a, b):
return a * b
# default parameter
def sayHello(name="grab"):
return f"Hi {name}"
msg = sayHello("hardy")
print(msg) # Hi hardy
# parameter 이름을 직접 넣어줄 수도 있다.
sayHello(name="hardy") # Hi hardy 반환
sayHello() # Hi grab 반환
# 클래스
- 함수와 비슷하게
class 클래스명:
으로 표현합니다- 파이썬의 클래스는 상속이 가능합니다
class 클래스명(상속할 클래스명):
으로 표현합니다
- 파이썬의 클래스는 상속이 가능합니다
- 인스턴스 자신을 지칭할 때
self
로 표현하며 모든 클래스의 메소드의 첫번째 인자에 들어갑니다 - 속성(Attribute)은 self에 선언해줍니다.
- 보통 생성자에서 인스턴스의 속성을 많이 정의해줍니다.
# Case 1
class Person:
# 생성자 메서드
def __init__(self, name):
self.name = name
def study(self):
print(f"{self.name}은 열심히 공부합니다")
# 클래스를 인스턴스화 합니다.
p = Person(name="grab")
# 메서드를 호출합니다.
p.study() # grab은 열심히 공부합니다.
# 인스턴스 변수에 접근할 수 있습니다 (참고: 파이썬은 별도의 접근제어자가 없습니다)
p.name # grab
- 클래스 변수, 클래스 메서드는 인스턴스화하지 않고 사용이 가능합니다.
- 클래스 메서드와 유사하게 스태틱 메서드(static method)도 있습니다.
# Case 2
class Car:
# 클래스 변수
fuel=100
# 클래스 메서드
@classmethod
def show_fuel(cls): # 첫번째 인자에 현재 클래스가 들어옵니다.
print(cls.fuel)
# 스태틱 메서드는 인스턴스화하지 않고 바로 사용할 수 있습니다
Car.show_fuel() # 100
# 클래스 변수도 바로 사용 가능합니다.
Car.fuel # 100
# 모듈과 패키지
모듈
은 변수, 함수등을 포함하는 파일입니다.패키지
는 모듈을 모아놓은 디렉토리라고 보면 됩니다.
├── a
│ ├── b.py
│ └── c.py
└── d.py
# a 디렉토리는 b와 c라는 모듈을 담은 패키지입니다.
# a/b.py
filename = "b.py"
def get_info():
return {"filename": filename}
모듈을 다른 모듈에서 사용하기 위해선
import
를 사용합니다.- import시 모듈의 확장자인 .py는 붙이지 않습니다.
- 모듈을 import하면 내부에 있는 변수와 함수를 전부 사용할 수 있습니다.
#a/c.py import b print(get_info()) # {'filename': 'b.py'}
패키지를 불러오기 위해선
from ... import
을 사용합니다.#d.py from a import b print(get_info()) # {'filename': 'b.py'}
모듈의 특정 변수나 함수만 불러올 수도 있습니다.
#a.py from a.b import get_info print(get_info()) # Works print(filename) # Error
기본적으로 파이썬에서는 파일을 불러올 때 절대경로를 기준으로 불러옵니다. 절대경로의 기준은 일반적으로 프로젝트의 루트 경로를 기준으로 합니다
- (import sys) sys.path를 통해 절대경로로 잡히는 루트 경로들을 확인이 가능합니다
#c.py from a import b print(filename) # b.py
파이썬 파일을 직접 실행할 때만 실행되는 구문을 작성할 때는 아래와 같이 활용합니다.
# d.py print("Hello") if __name__ == "__main__": print("Bye") --- python d.py # Hello # Bye
# 타입
파이썬은 동적 타입 언어로, 코드에서 직접적으로 타입을 명시해주지 않아도 내부적으로 알아서 타입을 추론하게 됩니다.
하지만 코드를 작성하는 시점에서 해당 변수의 타입, 함수가 반환하는 타입 등을 제대로 확인하지 못하는 이슈가 있습니다.
- 기본적으로 IDE를 사용하면 내부적으로 간단한 타입을 추론해주긴 하지만, 한계가 있습니다.
파이썬에서는 타입을 명시적으로 적어줄 수 있습니다.
- 보통변수, 함수에
:
을 통해 type annotation을 해줍니다.- 함수에서 return type을 명시해줄 때는
→
를 사용합니다.
- 함수에서 return type을 명시해줄 때는
- 기본 type으로는
str
,int
,float
,list
,dict
등이 존재합니다.
def hello(name: str) -> None: print(f"Hello {name}") def get_banana() -> str: return "Banana" def sum_nums(nums: list) -> int: return sum(nums) # sum_nums([1,2,3]) # 6 # 기본적으로 name에는 문자열이 들어가기 때문에 type annotation을 해주지 않아도 기본 추론이 가능합니다. name: str = "grab"
- 조금 더 자세한 타입을 명시해주고 싶을 때
typing
모듈을 사용합니다.
from typing import List class School: def set_names(self, names: List[str]) -> None : self.names = names def set_schedule(self, schedule: Dict[str, str]) -> None: self.schedule = sechedule school = School() school.set_names(names=["grab", "larry"] school.set_schedule(schedule={ "09:00-10:00": "수학시간" })
- 보통변수, 함수에
TIP
기본적으로 파이썬에서는 타입을 잘못 입력하더라도 컴파일 타임에서 오류가 발생하지 않습니다 (런타임에서 오류가 날 수도 있겠죠)
컴파일 타임에서 타입 체크를 하고 싶을 때 mypy
를 많이 활용합니다.
# 예외처리
예외 발생시키기
raise
를 통해 Exception을 발생시킵니다.- 실제로 파이썬에서는 Exception을 상속받은 다양한 예외가 존재합니다 https://docs.python.org/ko/3/library/exceptions.html (opens new window)
raise Exception("에러 발생") # Traceback (most recent call last): # File "<string>", line 1, in <module> # Exception: 에러 발생
에러 캐치하기
try...except
를 활용하여 에러를 캐치합니다.except
를 할 때 처리할 예외를 넣어줍니다. 그리고 해당 예외 정보를 처리하고 싶다면as 이름
으로 처리 가능합니다.
finally
는 try문이 끝나고 반드시 동작해야 할 코드를 넣어줍니다.
try: print("HI") raise Exception("에러 발생") print("BYE") except Exception as e: print(e) finally: print("FINISHED") # HI # 에러 발생 # FINISHED
← 사전 파이썬 공부하기 작업 공간 →